package com.virtualightning.mvvm.extensions

import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import java.io.Serializable

///////////////////////////////////////////////////////////////////////////
// 代码分割线 on 2021/1/26 上午10:23 by CimZzz
// 以下内容为:
// Bundle 的扩展方法
///////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////
// Add by CimZzz on 2021/1/26 上午10:25
// 快速构造 Bundle 的方法
///////////////////////////////////////////////////////////////////////////
inline fun buildBundle(callback: Bundle.() -> Unit) : Bundle {
    val bundle = Bundle()
    callback(bundle)
    return bundle
}

///////////////////////////////////////////////////////////////////////////
// Add by CimZzz on 2021/10/9 3:58 PM
// 快速构造 Intent 的方法
///////////////////////////////////////////////////////////////////////////
inline fun buildIntent(callback: Intent.() -> Unit) : Intent {
    val intent = Intent()
    callback(intent)
    return intent
}

///////////////////////////////////////////////////////////////////////////
// Add by CimZzz on 2021/1/26 下午4:34
// 快速向 Bundle 内存值
///////////////////////////////////////////////////////////////////////////
fun Bundle?.put(key: String, value: Any?) {
    if(value == null) {
        this?.remove(key)
        return
    }

    this?.apply {
        when (value) {
            is Int -> putInt(key, value)
            is Float -> putFloat(key, value)
            is String -> putString(key, value)
            is Double -> putDouble(key, value)
            is Long -> putLong(key, value)
            is Parcelable -> putParcelable(key, value)
            is Serializable -> putSerializable(key, value)
        }
    }
}

///////////////////////////////////////////////////////////////////////////
// Add by CimZzz on 2021/1/26 下午3:58
// 快速从 Bundle 中取值
///////////////////////////////////////////////////////////////////////////
inline fun <reified T> Bundle?.find(key: String) : T? {
    return this?.get(key) as? T
}